#include<iostream>
#include<stdlib.h>
#include<unistd.h>
using namespace std;

bool GetQueryString(std::string &query_string)
{
    bool result = false;
    std::string method = getenv("METHOD");
    if("GET" == method)
    {
        query_string = getenv("QUERY_STRING");
        result = true;
    }
    else if("POST" == method)
    {
        int content_length = atoi(getenv("CONTENT_LENGTH"));
        char c = 0;
        while(content_length)
        {
            read(0, &c, 1);//从标准输入（读管道）fd==0里读取，子进程重定向了
            query_string.push_back(c);
            content_length--;
        }
        result = true;
    }
    else{
        result = false;
    }
    return result;
}
void CutString(std::string &in, const std::string &sep, std::string &out1, std::string &out2)
{
    auto pos = in.find(sep);
    if(std::string::npos != pos)
    {
        out1 = in.substr(0, pos);//前闭后开
        out2 = in.substr(pos+sep.size());
    }
}
int main()
{
    std::string query_string;
    GetQueryString(query_string);
    
    //拆分参数并写给http
    //a=100&b=200
    std::string str1;
    std::string str2;
    CutString(query_string, "&", str1, str2);
    
    std::string name1;
    std::string value1;
    CutString(str1, "=", name1, value1);

    std::string name2;
    std::string value2;
    CutString(str2, "=", name2, value2);

    //http进行过重定向，cout是往管道文件输出
    std::cout << name1 << " : " << value1 << std::endl;
    std::cout << name2 << " : " << value2 << std::endl;

    std::cerr << name1 << " : " << value1 << std::endl;
    std::cerr << name2 << " : " << value2 << std::endl;

    int x = atoi(value1.c_str());
    int y = atoi(value2.c_str());
    
    std::cout << "<html>";
    std::cout << "<head><meta charset=\"utf-8\"></head>";
    std::cout << "<body>";
    std::cout << "<h3>" << value1 << " + " << value2 << " = " << x+y <<"</h3>";
    std::cout << "<h3>" << value1 << " - " << value2 << " = " << x-y <<"</h3>";
    std::cout << "<h3>" << value1 << " * " << value2 << " = " << x*y <<"</h3>";
    std::cout << "<h3>" << value1 << " / " << value2 << " = " << x/y <<"</h3>";
    std::cout << "</body>";
    std::cout << "</html>";

    return 0;
}